PIE: Fix reloc at the beginning of bl31 entrypoint
authorLouis Mayencourt <[email protected]>
Fri, 22 Mar 2019 16:33:23 +0000 (16:33 +0000)
committerLouis Mayencourt <[email protected]>
Mon, 25 Mar 2019 10:54:59 +0000 (10:54 +0000)
The relocation fixup code must be called at the beginning of bl31
entrypoint to ensure that CPU specific reset handlers are fixed up for
relocations.

Change-Id: Icb04eacb2d4c26c26b08b768d871d2c82777babb
Signed-off-by: Louis Mayencourt <[email protected]>
bl31/aarch64/bl31_entrypoint.S

index 065edffc7d51e089ed1194f6f0dafe9becf11020..f24458c1bb47e5ec3e04603858c7cdca2c7d2f21 100644 (file)
@@ -23,7 +23,6 @@
         */
 
 func bl31_entrypoint
-#if !RESET_TO_BL31
        /* ---------------------------------------------------------------
         * Stash the previous bootloader arguments x0 - x3 for later use.
         * ---------------------------------------------------------------
@@ -33,6 +32,18 @@ func bl31_entrypoint
        mov     x22, x2
        mov     x23, x3
 
+       /* --------------------------------------------------------------------
+        * If PIE is enabled, fixup the Global descriptor Table and dynamic
+        * relocations
+        * --------------------------------------------------------------------
+        */
+#if ENABLE_PIE
+       mov_imm x0, BL31_BASE
+       mov_imm x1, BL31_LIMIT
+       bl      fixup_gdt_reloc
+#endif /* ENABLE_PIE */
+
+#if !RESET_TO_BL31
        /* ---------------------------------------------------------------------
         * For !RESET_TO_BL31 systems, only the primary CPU ever reaches
         * bl31_entrypoint() during the cold boot flow, so the cold/warm boot
@@ -50,6 +61,7 @@ func bl31_entrypoint
                _init_c_runtime=1                               \
                _exception_vectors=runtime_exceptions
 #else
+
        /* ---------------------------------------------------------------------
         * For RESET_TO_BL31 systems which have a programmable reset address,
         * bl31_entrypoint() is executed only on the cold boot path so we can
@@ -76,17 +88,6 @@ func bl31_entrypoint
        mov     x23, 0
 #endif /* RESET_TO_BL31 */
 
-       /* --------------------------------------------------------------------
-        * If PIE is enabled, fixup the Global descriptor Table and dynamic
-        * relocations
-        * --------------------------------------------------------------------
-        */
-#if ENABLE_PIE
-       mov_imm x0, BL31_BASE
-       mov_imm x1, BL31_LIMIT
-       bl      fixup_gdt_reloc
-#endif /* ENABLE_PIE */
-
        /* --------------------------------------------------------------------
         * Perform BL31 setup
         * --------------------------------------------------------------------